package dk.itu.smdp.ftc.parser.antlr.internal; 

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import dk.itu.smdp.ftc.services.FTCGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalFTCParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'Mapping'", "'{'", "'}'", "':'", "';'", "'+='", "'['", "']'", "'-'", "'.'", "'/'", "'!'", "'&&'", "'||'"
    };
    public static final int RULE_ID=4;
    public static final int T__24=24;
    public static final int T__23=23;
    public static final int T__22=22;
    public static final int RULE_ANY_OTHER=10;
    public static final int T__21=21;
    public static final int T__20=20;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;
    public static final int T__19=19;
    public static final int RULE_STRING=5;
    public static final int T__16=16;
    public static final int T__15=15;
    public static final int T__18=18;
    public static final int T__17=17;
    public static final int T__12=12;
    public static final int T__11=11;
    public static final int T__14=14;
    public static final int T__13=13;
    public static final int RULE_INT=6;
    public static final int RULE_WS=9;

    // delegates
    // delegators


        public InternalFTCParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalFTCParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalFTCParser.tokenNames; }
    public String getGrammarFileName() { return "../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g"; }



     	private FTCGrammarAccess grammarAccess;
     	
        public InternalFTCParser(TokenStream input, FTCGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "ModelRoot";	
       	}
       	
       	@Override
       	protected FTCGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start "entryRuleModelRoot"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:68:1: entryRuleModelRoot returns [EObject current=null] : iv_ruleModelRoot= ruleModelRoot EOF ;
    public final EObject entryRuleModelRoot() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleModelRoot = null;


        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:69:2: (iv_ruleModelRoot= ruleModelRoot EOF )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:70:2: iv_ruleModelRoot= ruleModelRoot EOF
            {
             newCompositeNode(grammarAccess.getModelRootRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleModelRoot_in_entryRuleModelRoot75);
            iv_ruleModelRoot=ruleModelRoot();

            state._fsp--;

             current =iv_ruleModelRoot; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleModelRoot85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleModelRoot"


    // $ANTLR start "ruleModelRoot"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:77:1: ruleModelRoot returns [EObject current=null] : (otherlv_0= 'Mapping' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= '{' ( (lv_modules_3_0= ruleModule ) ) ( (lv_modules_4_0= ruleModule ) )* otherlv_5= '}' )? ( (lv_mappings_6_0= ruleMapping ) ) ( (lv_mappings_7_0= ruleMapping ) )* ) ;
    public final EObject ruleModelRoot() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_5=null;
        EObject lv_modules_3_0 = null;

        EObject lv_modules_4_0 = null;

        EObject lv_mappings_6_0 = null;

        EObject lv_mappings_7_0 = null;


         enterRule(); 
            
        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:80:28: ( (otherlv_0= 'Mapping' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= '{' ( (lv_modules_3_0= ruleModule ) ) ( (lv_modules_4_0= ruleModule ) )* otherlv_5= '}' )? ( (lv_mappings_6_0= ruleMapping ) ) ( (lv_mappings_7_0= ruleMapping ) )* ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:81:1: (otherlv_0= 'Mapping' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= '{' ( (lv_modules_3_0= ruleModule ) ) ( (lv_modules_4_0= ruleModule ) )* otherlv_5= '}' )? ( (lv_mappings_6_0= ruleMapping ) ) ( (lv_mappings_7_0= ruleMapping ) )* )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:81:1: (otherlv_0= 'Mapping' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= '{' ( (lv_modules_3_0= ruleModule ) ) ( (lv_modules_4_0= ruleModule ) )* otherlv_5= '}' )? ( (lv_mappings_6_0= ruleMapping ) ) ( (lv_mappings_7_0= ruleMapping ) )* )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:81:3: otherlv_0= 'Mapping' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= '{' ( (lv_modules_3_0= ruleModule ) ) ( (lv_modules_4_0= ruleModule ) )* otherlv_5= '}' )? ( (lv_mappings_6_0= ruleMapping ) ) ( (lv_mappings_7_0= ruleMapping ) )*
            {
            otherlv_0=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleModelRoot122); 

                	newLeafNode(otherlv_0, grammarAccess.getModelRootAccess().getMappingKeyword_0());
                
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:85:1: ( (lv_name_1_0= RULE_ID ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:86:1: (lv_name_1_0= RULE_ID )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:86:1: (lv_name_1_0= RULE_ID )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:87:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleModelRoot139); 

            			newLeafNode(lv_name_1_0, grammarAccess.getModelRootAccess().getNameIDTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getModelRootRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"ID");
            	    

            }


            }

            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:103:2: (otherlv_2= '{' ( (lv_modules_3_0= ruleModule ) ) ( (lv_modules_4_0= ruleModule ) )* otherlv_5= '}' )?
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==12) ) {
                alt2=1;
            }
            switch (alt2) {
                case 1 :
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:103:4: otherlv_2= '{' ( (lv_modules_3_0= ruleModule ) ) ( (lv_modules_4_0= ruleModule ) )* otherlv_5= '}'
                    {
                    otherlv_2=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleModelRoot157); 

                        	newLeafNode(otherlv_2, grammarAccess.getModelRootAccess().getLeftCurlyBracketKeyword_2_0());
                        
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:107:1: ( (lv_modules_3_0= ruleModule ) )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:108:1: (lv_modules_3_0= ruleModule )
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:108:1: (lv_modules_3_0= ruleModule )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:109:3: lv_modules_3_0= ruleModule
                    {
                     
                    	        newCompositeNode(grammarAccess.getModelRootAccess().getModulesModuleParserRuleCall_2_1_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleModule_in_ruleModelRoot178);
                    lv_modules_3_0=ruleModule();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getModelRootRule());
                    	        }
                           		add(
                           			current, 
                           			"modules",
                            		lv_modules_3_0, 
                            		"Module");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:125:2: ( (lv_modules_4_0= ruleModule ) )*
                    loop1:
                    do {
                        int alt1=2;
                        int LA1_0 = input.LA(1);

                        if ( (LA1_0==RULE_ID) ) {
                            alt1=1;
                        }


                        switch (alt1) {
                    	case 1 :
                    	    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:126:1: (lv_modules_4_0= ruleModule )
                    	    {
                    	    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:126:1: (lv_modules_4_0= ruleModule )
                    	    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:127:3: lv_modules_4_0= ruleModule
                    	    {
                    	     
                    	    	        newCompositeNode(grammarAccess.getModelRootAccess().getModulesModuleParserRuleCall_2_2_0()); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleModule_in_ruleModelRoot199);
                    	    lv_modules_4_0=ruleModule();

                    	    state._fsp--;


                    	    	        if (current==null) {
                    	    	            current = createModelElementForParent(grammarAccess.getModelRootRule());
                    	    	        }
                    	           		add(
                    	           			current, 
                    	           			"modules",
                    	            		lv_modules_4_0, 
                    	            		"Module");
                    	    	        afterParserOrEnumRuleCall();
                    	    	    

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop1;
                        }
                    } while (true);

                    otherlv_5=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleModelRoot212); 

                        	newLeafNode(otherlv_5, grammarAccess.getModelRootAccess().getRightCurlyBracketKeyword_2_3());
                        

                    }
                    break;

            }

            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:147:3: ( (lv_mappings_6_0= ruleMapping ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:148:1: (lv_mappings_6_0= ruleMapping )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:148:1: (lv_mappings_6_0= ruleMapping )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:149:3: lv_mappings_6_0= ruleMapping
            {
             
            	        newCompositeNode(grammarAccess.getModelRootAccess().getMappingsMappingParserRuleCall_3_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleMapping_in_ruleModelRoot235);
            lv_mappings_6_0=ruleMapping();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getModelRootRule());
            	        }
                   		add(
                   			current, 
                   			"mappings",
                    		lv_mappings_6_0, 
                    		"Mapping");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:165:2: ( (lv_mappings_7_0= ruleMapping ) )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==RULE_ID||(LA3_0>=22 && LA3_0<=24)) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:166:1: (lv_mappings_7_0= ruleMapping )
            	    {
            	    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:166:1: (lv_mappings_7_0= ruleMapping )
            	    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:167:3: lv_mappings_7_0= ruleMapping
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getModelRootAccess().getMappingsMappingParserRuleCall_4_0()); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleMapping_in_ruleModelRoot256);
            	    lv_mappings_7_0=ruleMapping();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getModelRootRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"mappings",
            	            		lv_mappings_7_0, 
            	            		"Mapping");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop3;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleModelRoot"


    // $ANTLR start "entryRuleFeatureExpression"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:191:1: entryRuleFeatureExpression returns [EObject current=null] : iv_ruleFeatureExpression= ruleFeatureExpression EOF ;
    public final EObject entryRuleFeatureExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleFeatureExpression = null;


        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:192:2: (iv_ruleFeatureExpression= ruleFeatureExpression EOF )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:193:2: iv_ruleFeatureExpression= ruleFeatureExpression EOF
            {
             newCompositeNode(grammarAccess.getFeatureExpressionRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleFeatureExpression_in_entryRuleFeatureExpression293);
            iv_ruleFeatureExpression=ruleFeatureExpression();

            state._fsp--;

             current =iv_ruleFeatureExpression; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleFeatureExpression303); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleFeatureExpression"


    // $ANTLR start "ruleFeatureExpression"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:200:1: ruleFeatureExpression returns [EObject current=null] : this_BinaryFeatureExpression_0= ruleBinaryFeatureExpression ;
    public final EObject ruleFeatureExpression() throws RecognitionException {
        EObject current = null;

        EObject this_BinaryFeatureExpression_0 = null;


         enterRule(); 
            
        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:203:28: (this_BinaryFeatureExpression_0= ruleBinaryFeatureExpression )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:205:5: this_BinaryFeatureExpression_0= ruleBinaryFeatureExpression
            {
             
                    newCompositeNode(grammarAccess.getFeatureExpressionAccess().getBinaryFeatureExpressionParserRuleCall()); 
                
            pushFollow(FollowSets000.FOLLOW_ruleBinaryFeatureExpression_in_ruleFeatureExpression349);
            this_BinaryFeatureExpression_0=ruleBinaryFeatureExpression();

            state._fsp--;

             
                    current = this_BinaryFeatureExpression_0; 
                    afterParserOrEnumRuleCall();
                

            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleFeatureExpression"


    // $ANTLR start "entryRuleBinaryFeatureExpression"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:221:1: entryRuleBinaryFeatureExpression returns [EObject current=null] : iv_ruleBinaryFeatureExpression= ruleBinaryFeatureExpression EOF ;
    public final EObject entryRuleBinaryFeatureExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBinaryFeatureExpression = null;


        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:222:2: (iv_ruleBinaryFeatureExpression= ruleBinaryFeatureExpression EOF )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:223:2: iv_ruleBinaryFeatureExpression= ruleBinaryFeatureExpression EOF
            {
             newCompositeNode(grammarAccess.getBinaryFeatureExpressionRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleBinaryFeatureExpression_in_entryRuleBinaryFeatureExpression383);
            iv_ruleBinaryFeatureExpression=ruleBinaryFeatureExpression();

            state._fsp--;

             current =iv_ruleBinaryFeatureExpression; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleBinaryFeatureExpression393); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleBinaryFeatureExpression"


    // $ANTLR start "ruleBinaryFeatureExpression"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:230:1: ruleBinaryFeatureExpression returns [EObject current=null] : ( (this_UnaryFeatureExpression_0= ruleUnaryFeatureExpression | this_Feature_1= ruleFeature ) ( () ( (lv_operator_3_0= ruleOperatorsEnum ) ) ( (lv_right_4_0= ruleBinaryFeatureExpression ) ) )? ) ;
    public final EObject ruleBinaryFeatureExpression() throws RecognitionException {
        EObject current = null;

        EObject this_UnaryFeatureExpression_0 = null;

        EObject this_Feature_1 = null;

        Enumerator lv_operator_3_0 = null;

        EObject lv_right_4_0 = null;


         enterRule(); 
            
        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:233:28: ( ( (this_UnaryFeatureExpression_0= ruleUnaryFeatureExpression | this_Feature_1= ruleFeature ) ( () ( (lv_operator_3_0= ruleOperatorsEnum ) ) ( (lv_right_4_0= ruleBinaryFeatureExpression ) ) )? ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:234:1: ( (this_UnaryFeatureExpression_0= ruleUnaryFeatureExpression | this_Feature_1= ruleFeature ) ( () ( (lv_operator_3_0= ruleOperatorsEnum ) ) ( (lv_right_4_0= ruleBinaryFeatureExpression ) ) )? )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:234:1: ( (this_UnaryFeatureExpression_0= ruleUnaryFeatureExpression | this_Feature_1= ruleFeature ) ( () ( (lv_operator_3_0= ruleOperatorsEnum ) ) ( (lv_right_4_0= ruleBinaryFeatureExpression ) ) )? )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:234:2: (this_UnaryFeatureExpression_0= ruleUnaryFeatureExpression | this_Feature_1= ruleFeature ) ( () ( (lv_operator_3_0= ruleOperatorsEnum ) ) ( (lv_right_4_0= ruleBinaryFeatureExpression ) ) )?
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:234:2: (this_UnaryFeatureExpression_0= ruleUnaryFeatureExpression | this_Feature_1= ruleFeature )
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( ((LA4_0>=22 && LA4_0<=24)) ) {
                alt4=1;
            }
            else if ( (LA4_0==RULE_ID) ) {
                alt4=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 4, 0, input);

                throw nvae;
            }
            switch (alt4) {
                case 1 :
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:235:5: this_UnaryFeatureExpression_0= ruleUnaryFeatureExpression
                    {
                     
                            newCompositeNode(grammarAccess.getBinaryFeatureExpressionAccess().getUnaryFeatureExpressionParserRuleCall_0_0()); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleUnaryFeatureExpression_in_ruleBinaryFeatureExpression441);
                    this_UnaryFeatureExpression_0=ruleUnaryFeatureExpression();

                    state._fsp--;

                     
                            current = this_UnaryFeatureExpression_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:245:5: this_Feature_1= ruleFeature
                    {
                     
                            newCompositeNode(grammarAccess.getBinaryFeatureExpressionAccess().getFeatureParserRuleCall_0_1()); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleFeature_in_ruleBinaryFeatureExpression468);
                    this_Feature_1=ruleFeature();

                    state._fsp--;

                     
                            current = this_Feature_1; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }

            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:253:2: ( () ( (lv_operator_3_0= ruleOperatorsEnum ) ) ( (lv_right_4_0= ruleBinaryFeatureExpression ) ) )?
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( ((LA5_0>=22 && LA5_0<=24)) ) {
                alt5=1;
            }
            switch (alt5) {
                case 1 :
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:253:3: () ( (lv_operator_3_0= ruleOperatorsEnum ) ) ( (lv_right_4_0= ruleBinaryFeatureExpression ) )
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:253:3: ()
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:254:5: 
                    {

                            current = forceCreateModelElementAndSet(
                                grammarAccess.getBinaryFeatureExpressionAccess().getBinaryFeatureExpressionLeftAction_1_0(),
                                current);
                        

                    }

                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:259:2: ( (lv_operator_3_0= ruleOperatorsEnum ) )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:260:1: (lv_operator_3_0= ruleOperatorsEnum )
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:260:1: (lv_operator_3_0= ruleOperatorsEnum )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:261:3: lv_operator_3_0= ruleOperatorsEnum
                    {
                     
                    	        newCompositeNode(grammarAccess.getBinaryFeatureExpressionAccess().getOperatorOperatorsEnumEnumRuleCall_1_1_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleOperatorsEnum_in_ruleBinaryFeatureExpression499);
                    lv_operator_3_0=ruleOperatorsEnum();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getBinaryFeatureExpressionRule());
                    	        }
                           		set(
                           			current, 
                           			"operator",
                            		lv_operator_3_0, 
                            		"OperatorsEnum");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:277:2: ( (lv_right_4_0= ruleBinaryFeatureExpression ) )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:278:1: (lv_right_4_0= ruleBinaryFeatureExpression )
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:278:1: (lv_right_4_0= ruleBinaryFeatureExpression )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:279:3: lv_right_4_0= ruleBinaryFeatureExpression
                    {
                     
                    	        newCompositeNode(grammarAccess.getBinaryFeatureExpressionAccess().getRightBinaryFeatureExpressionParserRuleCall_1_2_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleBinaryFeatureExpression_in_ruleBinaryFeatureExpression520);
                    lv_right_4_0=ruleBinaryFeatureExpression();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getBinaryFeatureExpressionRule());
                    	        }
                           		set(
                           			current, 
                           			"right",
                            		lv_right_4_0, 
                            		"BinaryFeatureExpression");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleBinaryFeatureExpression"


    // $ANTLR start "entryRuleUnaryFeatureExpression"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:303:1: entryRuleUnaryFeatureExpression returns [EObject current=null] : iv_ruleUnaryFeatureExpression= ruleUnaryFeatureExpression EOF ;
    public final EObject entryRuleUnaryFeatureExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleUnaryFeatureExpression = null;


        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:304:2: (iv_ruleUnaryFeatureExpression= ruleUnaryFeatureExpression EOF )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:305:2: iv_ruleUnaryFeatureExpression= ruleUnaryFeatureExpression EOF
            {
             newCompositeNode(grammarAccess.getUnaryFeatureExpressionRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleUnaryFeatureExpression_in_entryRuleUnaryFeatureExpression558);
            iv_ruleUnaryFeatureExpression=ruleUnaryFeatureExpression();

            state._fsp--;

             current =iv_ruleUnaryFeatureExpression; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleUnaryFeatureExpression568); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleUnaryFeatureExpression"


    // $ANTLR start "ruleUnaryFeatureExpression"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:312:1: ruleUnaryFeatureExpression returns [EObject current=null] : ( ( (lv_operator_0_0= ruleOperatorsEnum ) ) ( (lv_expr_1_0= ruleFeature ) ) ) ;
    public final EObject ruleUnaryFeatureExpression() throws RecognitionException {
        EObject current = null;

        Enumerator lv_operator_0_0 = null;

        EObject lv_expr_1_0 = null;


         enterRule(); 
            
        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:315:28: ( ( ( (lv_operator_0_0= ruleOperatorsEnum ) ) ( (lv_expr_1_0= ruleFeature ) ) ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:316:1: ( ( (lv_operator_0_0= ruleOperatorsEnum ) ) ( (lv_expr_1_0= ruleFeature ) ) )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:316:1: ( ( (lv_operator_0_0= ruleOperatorsEnum ) ) ( (lv_expr_1_0= ruleFeature ) ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:316:2: ( (lv_operator_0_0= ruleOperatorsEnum ) ) ( (lv_expr_1_0= ruleFeature ) )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:316:2: ( (lv_operator_0_0= ruleOperatorsEnum ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:317:1: (lv_operator_0_0= ruleOperatorsEnum )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:317:1: (lv_operator_0_0= ruleOperatorsEnum )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:318:3: lv_operator_0_0= ruleOperatorsEnum
            {
             
            	        newCompositeNode(grammarAccess.getUnaryFeatureExpressionAccess().getOperatorOperatorsEnumEnumRuleCall_0_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleOperatorsEnum_in_ruleUnaryFeatureExpression614);
            lv_operator_0_0=ruleOperatorsEnum();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getUnaryFeatureExpressionRule());
            	        }
                   		set(
                   			current, 
                   			"operator",
                    		lv_operator_0_0, 
                    		"OperatorsEnum");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:334:2: ( (lv_expr_1_0= ruleFeature ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:335:1: (lv_expr_1_0= ruleFeature )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:335:1: (lv_expr_1_0= ruleFeature )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:336:3: lv_expr_1_0= ruleFeature
            {
             
            	        newCompositeNode(grammarAccess.getUnaryFeatureExpressionAccess().getExprFeatureParserRuleCall_1_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleFeature_in_ruleUnaryFeatureExpression635);
            lv_expr_1_0=ruleFeature();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getUnaryFeatureExpressionRule());
            	        }
                   		set(
                   			current, 
                   			"expr",
                    		lv_expr_1_0, 
                    		"Feature");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleUnaryFeatureExpression"


    // $ANTLR start "entryRuleMapping"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:360:1: entryRuleMapping returns [EObject current=null] : iv_ruleMapping= ruleMapping EOF ;
    public final EObject entryRuleMapping() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMapping = null;


        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:361:2: (iv_ruleMapping= ruleMapping EOF )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:362:2: iv_ruleMapping= ruleMapping EOF
            {
             newCompositeNode(grammarAccess.getMappingRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleMapping_in_entryRuleMapping671);
            iv_ruleMapping=ruleMapping();

            state._fsp--;

             current =iv_ruleMapping; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleMapping681); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMapping"


    // $ANTLR start "ruleMapping"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:369:1: ruleMapping returns [EObject current=null] : ( ( (lv_expr_0_0= ruleFeatureExpression ) ) otherlv_1= ':' ( ( (lv_mapping_2_0= ruleFileMapping ) ) ( (lv_mapping_3_0= ruleFileMapping ) )* )? otherlv_4= ';' ) ;
    public final EObject ruleMapping() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_4=null;
        EObject lv_expr_0_0 = null;

        EObject lv_mapping_2_0 = null;

        EObject lv_mapping_3_0 = null;


         enterRule(); 
            
        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:372:28: ( ( ( (lv_expr_0_0= ruleFeatureExpression ) ) otherlv_1= ':' ( ( (lv_mapping_2_0= ruleFileMapping ) ) ( (lv_mapping_3_0= ruleFileMapping ) )* )? otherlv_4= ';' ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:373:1: ( ( (lv_expr_0_0= ruleFeatureExpression ) ) otherlv_1= ':' ( ( (lv_mapping_2_0= ruleFileMapping ) ) ( (lv_mapping_3_0= ruleFileMapping ) )* )? otherlv_4= ';' )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:373:1: ( ( (lv_expr_0_0= ruleFeatureExpression ) ) otherlv_1= ':' ( ( (lv_mapping_2_0= ruleFileMapping ) ) ( (lv_mapping_3_0= ruleFileMapping ) )* )? otherlv_4= ';' )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:373:2: ( (lv_expr_0_0= ruleFeatureExpression ) ) otherlv_1= ':' ( ( (lv_mapping_2_0= ruleFileMapping ) ) ( (lv_mapping_3_0= ruleFileMapping ) )* )? otherlv_4= ';'
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:373:2: ( (lv_expr_0_0= ruleFeatureExpression ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:374:1: (lv_expr_0_0= ruleFeatureExpression )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:374:1: (lv_expr_0_0= ruleFeatureExpression )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:375:3: lv_expr_0_0= ruleFeatureExpression
            {
             
            	        newCompositeNode(grammarAccess.getMappingAccess().getExprFeatureExpressionParserRuleCall_0_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleFeatureExpression_in_ruleMapping727);
            lv_expr_0_0=ruleFeatureExpression();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getMappingRule());
            	        }
                   		set(
                   			current, 
                   			"expr",
                    		lv_expr_0_0, 
                    		"FeatureExpression");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_1=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleMapping739); 

                	newLeafNode(otherlv_1, grammarAccess.getMappingAccess().getColonKeyword_1());
                
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:395:1: ( ( (lv_mapping_2_0= ruleFileMapping ) ) ( (lv_mapping_3_0= ruleFileMapping ) )* )?
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( ((LA7_0>=RULE_ID && LA7_0<=RULE_STRING)) ) {
                alt7=1;
            }
            switch (alt7) {
                case 1 :
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:395:2: ( (lv_mapping_2_0= ruleFileMapping ) ) ( (lv_mapping_3_0= ruleFileMapping ) )*
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:395:2: ( (lv_mapping_2_0= ruleFileMapping ) )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:396:1: (lv_mapping_2_0= ruleFileMapping )
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:396:1: (lv_mapping_2_0= ruleFileMapping )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:397:3: lv_mapping_2_0= ruleFileMapping
                    {
                     
                    	        newCompositeNode(grammarAccess.getMappingAccess().getMappingFileMappingParserRuleCall_2_0_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleFileMapping_in_ruleMapping761);
                    lv_mapping_2_0=ruleFileMapping();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getMappingRule());
                    	        }
                           		add(
                           			current, 
                           			"mapping",
                            		lv_mapping_2_0, 
                            		"FileMapping");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:413:2: ( (lv_mapping_3_0= ruleFileMapping ) )*
                    loop6:
                    do {
                        int alt6=2;
                        int LA6_0 = input.LA(1);

                        if ( ((LA6_0>=RULE_ID && LA6_0<=RULE_STRING)) ) {
                            alt6=1;
                        }


                        switch (alt6) {
                    	case 1 :
                    	    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:414:1: (lv_mapping_3_0= ruleFileMapping )
                    	    {
                    	    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:414:1: (lv_mapping_3_0= ruleFileMapping )
                    	    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:415:3: lv_mapping_3_0= ruleFileMapping
                    	    {
                    	     
                    	    	        newCompositeNode(grammarAccess.getMappingAccess().getMappingFileMappingParserRuleCall_2_1_0()); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleFileMapping_in_ruleMapping782);
                    	    lv_mapping_3_0=ruleFileMapping();

                    	    state._fsp--;


                    	    	        if (current==null) {
                    	    	            current = createModelElementForParent(grammarAccess.getMappingRule());
                    	    	        }
                    	           		add(
                    	           			current, 
                    	           			"mapping",
                    	            		lv_mapping_3_0, 
                    	            		"FileMapping");
                    	    	        afterParserOrEnumRuleCall();
                    	    	    

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop6;
                        }
                    } while (true);


                    }
                    break;

            }

            otherlv_4=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleMapping797); 

                	newLeafNode(otherlv_4, grammarAccess.getMappingAccess().getSemicolonKeyword_3());
                

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMapping"


    // $ANTLR start "entryRuleFileMapping"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:443:1: entryRuleFileMapping returns [EObject current=null] : iv_ruleFileMapping= ruleFileMapping EOF ;
    public final EObject entryRuleFileMapping() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleFileMapping = null;


        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:444:2: (iv_ruleFileMapping= ruleFileMapping EOF )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:445:2: iv_ruleFileMapping= ruleFileMapping EOF
            {
             newCompositeNode(grammarAccess.getFileMappingRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleFileMapping_in_entryRuleFileMapping833);
            iv_ruleFileMapping=ruleFileMapping();

            state._fsp--;

             current =iv_ruleFileMapping; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleFileMapping843); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleFileMapping"


    // $ANTLR start "ruleFileMapping"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:452:1: ruleFileMapping returns [EObject current=null] : ( ( ( ruleEString ) ) otherlv_1= '+=' ( (lv_files_2_0= rulePathExpression ) ) ( (lv_files_3_0= rulePathExpression ) )* ) ;
    public final EObject ruleFileMapping() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_files_2_0 = null;

        EObject lv_files_3_0 = null;


         enterRule(); 
            
        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:455:28: ( ( ( ( ruleEString ) ) otherlv_1= '+=' ( (lv_files_2_0= rulePathExpression ) ) ( (lv_files_3_0= rulePathExpression ) )* ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:456:1: ( ( ( ruleEString ) ) otherlv_1= '+=' ( (lv_files_2_0= rulePathExpression ) ) ( (lv_files_3_0= rulePathExpression ) )* )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:456:1: ( ( ( ruleEString ) ) otherlv_1= '+=' ( (lv_files_2_0= rulePathExpression ) ) ( (lv_files_3_0= rulePathExpression ) )* )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:456:2: ( ( ruleEString ) ) otherlv_1= '+=' ( (lv_files_2_0= rulePathExpression ) ) ( (lv_files_3_0= rulePathExpression ) )*
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:456:2: ( ( ruleEString ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:457:1: ( ruleEString )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:457:1: ( ruleEString )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:458:3: ruleEString
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getFileMappingRule());
            	        }
                    
             
            	        newCompositeNode(grammarAccess.getFileMappingAccess().getModuleModuleCrossReference_0_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleFileMapping891);
            ruleEString();

            state._fsp--;

             
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_1=(Token)match(input,16,FollowSets000.FOLLOW_16_in_ruleFileMapping903); 

                	newLeafNode(otherlv_1, grammarAccess.getFileMappingAccess().getPlusSignEqualsSignKeyword_1());
                
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:475:1: ( (lv_files_2_0= rulePathExpression ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:476:1: (lv_files_2_0= rulePathExpression )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:476:1: (lv_files_2_0= rulePathExpression )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:477:3: lv_files_2_0= rulePathExpression
            {
             
            	        newCompositeNode(grammarAccess.getFileMappingAccess().getFilesPathExpressionParserRuleCall_2_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_rulePathExpression_in_ruleFileMapping924);
            lv_files_2_0=rulePathExpression();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getFileMappingRule());
            	        }
                   		add(
                   			current, 
                   			"files",
                    		lv_files_2_0, 
                    		"PathExpression");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:493:2: ( (lv_files_3_0= rulePathExpression ) )*
            loop8:
            do {
                int alt8=2;
                int LA8_0 = input.LA(1);

                if ( (LA8_0==RULE_ID) ) {
                    int LA8_2 = input.LA(2);

                    if ( (LA8_2==EOF||(LA8_2>=RULE_ID && LA8_2<=RULE_STRING)||LA8_2==15||(LA8_2>=19 && LA8_2<=21)) ) {
                        alt8=1;
                    }


                }


                switch (alt8) {
            	case 1 :
            	    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:494:1: (lv_files_3_0= rulePathExpression )
            	    {
            	    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:494:1: (lv_files_3_0= rulePathExpression )
            	    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:495:3: lv_files_3_0= rulePathExpression
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getFileMappingAccess().getFilesPathExpressionParserRuleCall_3_0()); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_rulePathExpression_in_ruleFileMapping945);
            	    lv_files_3_0=rulePathExpression();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getFileMappingRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"files",
            	            		lv_files_3_0, 
            	            		"PathExpression");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop8;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleFileMapping"


    // $ANTLR start "entryRulePathExpression"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:519:1: entryRulePathExpression returns [EObject current=null] : iv_rulePathExpression= rulePathExpression EOF ;
    public final EObject entryRulePathExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePathExpression = null;


        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:520:2: (iv_rulePathExpression= rulePathExpression EOF )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:521:2: iv_rulePathExpression= rulePathExpression EOF
            {
             newCompositeNode(grammarAccess.getPathExpressionRule()); 
            pushFollow(FollowSets000.FOLLOW_rulePathExpression_in_entryRulePathExpression982);
            iv_rulePathExpression=rulePathExpression();

            state._fsp--;

             current =iv_rulePathExpression; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePathExpression992); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePathExpression"


    // $ANTLR start "rulePathExpression"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:528:1: rulePathExpression returns [EObject current=null] : (this_Path_0= rulePath ( () ( (lv_special_2_0= rulePathEnum ) ) ( (lv_suffix_3_0= rulePathExpression ) ) )? ) ;
    public final EObject rulePathExpression() throws RecognitionException {
        EObject current = null;

        EObject this_Path_0 = null;

        Enumerator lv_special_2_0 = null;

        EObject lv_suffix_3_0 = null;


         enterRule(); 
            
        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:531:28: ( (this_Path_0= rulePath ( () ( (lv_special_2_0= rulePathEnum ) ) ( (lv_suffix_3_0= rulePathExpression ) ) )? ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:532:1: (this_Path_0= rulePath ( () ( (lv_special_2_0= rulePathEnum ) ) ( (lv_suffix_3_0= rulePathExpression ) ) )? )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:532:1: (this_Path_0= rulePath ( () ( (lv_special_2_0= rulePathEnum ) ) ( (lv_suffix_3_0= rulePathExpression ) ) )? )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:533:5: this_Path_0= rulePath ( () ( (lv_special_2_0= rulePathEnum ) ) ( (lv_suffix_3_0= rulePathExpression ) ) )?
            {
             
                    newCompositeNode(grammarAccess.getPathExpressionAccess().getPathParserRuleCall_0()); 
                
            pushFollow(FollowSets000.FOLLOW_rulePath_in_rulePathExpression1039);
            this_Path_0=rulePath();

            state._fsp--;

             
                    current = this_Path_0; 
                    afterParserOrEnumRuleCall();
                
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:541:1: ( () ( (lv_special_2_0= rulePathEnum ) ) ( (lv_suffix_3_0= rulePathExpression ) ) )?
            int alt9=2;
            int LA9_0 = input.LA(1);

            if ( ((LA9_0>=19 && LA9_0<=21)) ) {
                alt9=1;
            }
            switch (alt9) {
                case 1 :
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:541:2: () ( (lv_special_2_0= rulePathEnum ) ) ( (lv_suffix_3_0= rulePathExpression ) )
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:541:2: ()
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:542:5: 
                    {

                            current = forceCreateModelElementAndSet(
                                grammarAccess.getPathExpressionAccess().getPathExpressionPrefixAction_1_0(),
                                current);
                        

                    }

                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:547:2: ( (lv_special_2_0= rulePathEnum ) )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:548:1: (lv_special_2_0= rulePathEnum )
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:548:1: (lv_special_2_0= rulePathEnum )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:549:3: lv_special_2_0= rulePathEnum
                    {
                     
                    	        newCompositeNode(grammarAccess.getPathExpressionAccess().getSpecialPathEnumEnumRuleCall_1_1_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_rulePathEnum_in_rulePathExpression1069);
                    lv_special_2_0=rulePathEnum();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getPathExpressionRule());
                    	        }
                           		set(
                           			current, 
                           			"special",
                            		lv_special_2_0, 
                            		"PathEnum");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:565:2: ( (lv_suffix_3_0= rulePathExpression ) )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:566:1: (lv_suffix_3_0= rulePathExpression )
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:566:1: (lv_suffix_3_0= rulePathExpression )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:567:3: lv_suffix_3_0= rulePathExpression
                    {
                     
                    	        newCompositeNode(grammarAccess.getPathExpressionAccess().getSuffixPathExpressionParserRuleCall_1_2_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_rulePathExpression_in_rulePathExpression1090);
                    lv_suffix_3_0=rulePathExpression();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getPathExpressionRule());
                    	        }
                           		set(
                           			current, 
                           			"suffix",
                            		lv_suffix_3_0, 
                            		"PathExpression");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePathExpression"


    // $ANTLR start "entryRulePath"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:591:1: entryRulePath returns [EObject current=null] : iv_rulePath= rulePath EOF ;
    public final EObject entryRulePath() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePath = null;


        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:592:2: (iv_rulePath= rulePath EOF )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:593:2: iv_rulePath= rulePath EOF
            {
             newCompositeNode(grammarAccess.getPathRule()); 
            pushFollow(FollowSets000.FOLLOW_rulePath_in_entryRulePath1128);
            iv_rulePath=rulePath();

            state._fsp--;

             current =iv_rulePath; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePath1138); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePath"


    // $ANTLR start "rulePath"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:600:1: rulePath returns [EObject current=null] : ( (lv_name_0_0= RULE_ID ) ) ;
    public final EObject rulePath() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:603:28: ( ( (lv_name_0_0= RULE_ID ) ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:604:1: ( (lv_name_0_0= RULE_ID ) )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:604:1: ( (lv_name_0_0= RULE_ID ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:605:1: (lv_name_0_0= RULE_ID )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:605:1: (lv_name_0_0= RULE_ID )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:606:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_rulePath1179); 

            			newLeafNode(lv_name_0_0, grammarAccess.getPathAccess().getNameIDTerminalRuleCall_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getPathRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"ID");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePath"


    // $ANTLR start "entryRuleModule"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:630:1: entryRuleModule returns [EObject current=null] : iv_ruleModule= ruleModule EOF ;
    public final EObject entryRuleModule() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleModule = null;


        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:631:2: (iv_ruleModule= ruleModule EOF )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:632:2: iv_ruleModule= ruleModule EOF
            {
             newCompositeNode(grammarAccess.getModuleRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleModule_in_entryRuleModule1219);
            iv_ruleModule=ruleModule();

            state._fsp--;

             current =iv_ruleModule; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleModule1229); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleModule"


    // $ANTLR start "ruleModule"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:639:1: ruleModule returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= '[' ( (lv_files_2_0= rulePathExpression ) ) ( (lv_files_3_0= rulePathExpression ) )* otherlv_4= ']' )? ) ;
    public final EObject ruleModule() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token otherlv_1=null;
        Token otherlv_4=null;
        EObject lv_files_2_0 = null;

        EObject lv_files_3_0 = null;


         enterRule(); 
            
        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:642:28: ( ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= '[' ( (lv_files_2_0= rulePathExpression ) ) ( (lv_files_3_0= rulePathExpression ) )* otherlv_4= ']' )? ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:643:1: ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= '[' ( (lv_files_2_0= rulePathExpression ) ) ( (lv_files_3_0= rulePathExpression ) )* otherlv_4= ']' )? )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:643:1: ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= '[' ( (lv_files_2_0= rulePathExpression ) ) ( (lv_files_3_0= rulePathExpression ) )* otherlv_4= ']' )? )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:643:2: ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= '[' ( (lv_files_2_0= rulePathExpression ) ) ( (lv_files_3_0= rulePathExpression ) )* otherlv_4= ']' )?
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:643:2: ( (lv_name_0_0= RULE_ID ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:644:1: (lv_name_0_0= RULE_ID )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:644:1: (lv_name_0_0= RULE_ID )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:645:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleModule1271); 

            			newLeafNode(lv_name_0_0, grammarAccess.getModuleAccess().getNameIDTerminalRuleCall_0_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getModuleRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"ID");
            	    

            }


            }

            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:661:2: (otherlv_1= '[' ( (lv_files_2_0= rulePathExpression ) ) ( (lv_files_3_0= rulePathExpression ) )* otherlv_4= ']' )?
            int alt11=2;
            int LA11_0 = input.LA(1);

            if ( (LA11_0==17) ) {
                alt11=1;
            }
            switch (alt11) {
                case 1 :
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:661:4: otherlv_1= '[' ( (lv_files_2_0= rulePathExpression ) ) ( (lv_files_3_0= rulePathExpression ) )* otherlv_4= ']'
                    {
                    otherlv_1=(Token)match(input,17,FollowSets000.FOLLOW_17_in_ruleModule1289); 

                        	newLeafNode(otherlv_1, grammarAccess.getModuleAccess().getLeftSquareBracketKeyword_1_0());
                        
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:665:1: ( (lv_files_2_0= rulePathExpression ) )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:666:1: (lv_files_2_0= rulePathExpression )
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:666:1: (lv_files_2_0= rulePathExpression )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:667:3: lv_files_2_0= rulePathExpression
                    {
                     
                    	        newCompositeNode(grammarAccess.getModuleAccess().getFilesPathExpressionParserRuleCall_1_1_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_rulePathExpression_in_ruleModule1310);
                    lv_files_2_0=rulePathExpression();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getModuleRule());
                    	        }
                           		add(
                           			current, 
                           			"files",
                            		lv_files_2_0, 
                            		"PathExpression");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:683:2: ( (lv_files_3_0= rulePathExpression ) )*
                    loop10:
                    do {
                        int alt10=2;
                        int LA10_0 = input.LA(1);

                        if ( (LA10_0==RULE_ID) ) {
                            alt10=1;
                        }


                        switch (alt10) {
                    	case 1 :
                    	    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:684:1: (lv_files_3_0= rulePathExpression )
                    	    {
                    	    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:684:1: (lv_files_3_0= rulePathExpression )
                    	    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:685:3: lv_files_3_0= rulePathExpression
                    	    {
                    	     
                    	    	        newCompositeNode(grammarAccess.getModuleAccess().getFilesPathExpressionParserRuleCall_1_2_0()); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_rulePathExpression_in_ruleModule1331);
                    	    lv_files_3_0=rulePathExpression();

                    	    state._fsp--;


                    	    	        if (current==null) {
                    	    	            current = createModelElementForParent(grammarAccess.getModuleRule());
                    	    	        }
                    	           		add(
                    	           			current, 
                    	           			"files",
                    	            		lv_files_3_0, 
                    	            		"PathExpression");
                    	    	        afterParserOrEnumRuleCall();
                    	    	    

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop10;
                        }
                    } while (true);

                    otherlv_4=(Token)match(input,18,FollowSets000.FOLLOW_18_in_ruleModule1344); 

                        	newLeafNode(otherlv_4, grammarAccess.getModuleAccess().getRightSquareBracketKeyword_1_3());
                        

                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleModule"


    // $ANTLR start "entryRuleFeature"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:713:1: entryRuleFeature returns [EObject current=null] : iv_ruleFeature= ruleFeature EOF ;
    public final EObject entryRuleFeature() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleFeature = null;


        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:714:2: (iv_ruleFeature= ruleFeature EOF )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:715:2: iv_ruleFeature= ruleFeature EOF
            {
             newCompositeNode(grammarAccess.getFeatureRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleFeature_in_entryRuleFeature1382);
            iv_ruleFeature=ruleFeature();

            state._fsp--;

             current =iv_ruleFeature; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleFeature1392); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleFeature"


    // $ANTLR start "ruleFeature"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:722:1: ruleFeature returns [EObject current=null] : ( (lv_name_0_0= RULE_ID ) ) ;
    public final EObject ruleFeature() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;

         enterRule(); 
            
        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:725:28: ( ( (lv_name_0_0= RULE_ID ) ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:726:1: ( (lv_name_0_0= RULE_ID ) )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:726:1: ( (lv_name_0_0= RULE_ID ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:727:1: (lv_name_0_0= RULE_ID )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:727:1: (lv_name_0_0= RULE_ID )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:728:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleFeature1433); 

            			newLeafNode(lv_name_0_0, grammarAccess.getFeatureAccess().getNameIDTerminalRuleCall_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getFeatureRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"ID");
            	    

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleFeature"


    // $ANTLR start "entryRuleEString"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:752:1: entryRuleEString returns [String current=null] : iv_ruleEString= ruleEString EOF ;
    public final String entryRuleEString() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleEString = null;


        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:753:2: (iv_ruleEString= ruleEString EOF )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:754:2: iv_ruleEString= ruleEString EOF
            {
             newCompositeNode(grammarAccess.getEStringRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_entryRuleEString1474);
            iv_ruleEString=ruleEString();

            state._fsp--;

             current =iv_ruleEString.getText(); 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEString1485); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEString"


    // $ANTLR start "ruleEString"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:761:1: ruleEString returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID ) ;
    public final AntlrDatatypeRuleToken ruleEString() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_STRING_0=null;
        Token this_ID_1=null;

         enterRule(); 
            
        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:764:28: ( (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:765:1: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:765:1: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID )
            int alt12=2;
            int LA12_0 = input.LA(1);

            if ( (LA12_0==RULE_STRING) ) {
                alt12=1;
            }
            else if ( (LA12_0==RULE_ID) ) {
                alt12=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 12, 0, input);

                throw nvae;
            }
            switch (alt12) {
                case 1 :
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:765:6: this_STRING_0= RULE_STRING
                    {
                    this_STRING_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_RULE_STRING_in_ruleEString1525); 

                    		current.merge(this_STRING_0);
                        
                     
                        newLeafNode(this_STRING_0, grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); 
                        

                    }
                    break;
                case 2 :
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:773:10: this_ID_1= RULE_ID
                    {
                    this_ID_1=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleEString1551); 

                    		current.merge(this_ID_1);
                        
                     
                        newLeafNode(this_ID_1, grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); 
                        

                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEString"


    // $ANTLR start "rulePathEnum"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:788:1: rulePathEnum returns [Enumerator current=null] : ( (enumLiteral_0= '-' ) | (enumLiteral_1= '.' ) | (enumLiteral_2= '/' ) ) ;
    public final Enumerator rulePathEnum() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;

         enterRule(); 
        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:790:28: ( ( (enumLiteral_0= '-' ) | (enumLiteral_1= '.' ) | (enumLiteral_2= '/' ) ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:791:1: ( (enumLiteral_0= '-' ) | (enumLiteral_1= '.' ) | (enumLiteral_2= '/' ) )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:791:1: ( (enumLiteral_0= '-' ) | (enumLiteral_1= '.' ) | (enumLiteral_2= '/' ) )
            int alt13=3;
            switch ( input.LA(1) ) {
            case 19:
                {
                alt13=1;
                }
                break;
            case 20:
                {
                alt13=2;
                }
                break;
            case 21:
                {
                alt13=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 13, 0, input);

                throw nvae;
            }

            switch (alt13) {
                case 1 :
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:791:2: (enumLiteral_0= '-' )
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:791:2: (enumLiteral_0= '-' )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:791:4: enumLiteral_0= '-'
                    {
                    enumLiteral_0=(Token)match(input,19,FollowSets000.FOLLOW_19_in_rulePathEnum1610); 

                            current = grammarAccess.getPathEnumAccess().getDASHEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_0, grammarAccess.getPathEnumAccess().getDASHEnumLiteralDeclaration_0()); 
                        

                    }


                    }
                    break;
                case 2 :
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:797:6: (enumLiteral_1= '.' )
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:797:6: (enumLiteral_1= '.' )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:797:8: enumLiteral_1= '.'
                    {
                    enumLiteral_1=(Token)match(input,20,FollowSets000.FOLLOW_20_in_rulePathEnum1627); 

                            current = grammarAccess.getPathEnumAccess().getPERIODEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_1, grammarAccess.getPathEnumAccess().getPERIODEnumLiteralDeclaration_1()); 
                        

                    }


                    }
                    break;
                case 3 :
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:803:6: (enumLiteral_2= '/' )
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:803:6: (enumLiteral_2= '/' )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:803:8: enumLiteral_2= '/'
                    {
                    enumLiteral_2=(Token)match(input,21,FollowSets000.FOLLOW_21_in_rulePathEnum1644); 

                            current = grammarAccess.getPathEnumAccess().getSLASHEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_2, grammarAccess.getPathEnumAccess().getSLASHEnumLiteralDeclaration_2()); 
                        

                    }


                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePathEnum"


    // $ANTLR start "ruleOperatorsEnum"
    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:813:1: ruleOperatorsEnum returns [Enumerator current=null] : ( (enumLiteral_0= '!' ) | (enumLiteral_1= '&&' ) | (enumLiteral_2= '||' ) ) ;
    public final Enumerator ruleOperatorsEnum() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;

         enterRule(); 
        try {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:815:28: ( ( (enumLiteral_0= '!' ) | (enumLiteral_1= '&&' ) | (enumLiteral_2= '||' ) ) )
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:816:1: ( (enumLiteral_0= '!' ) | (enumLiteral_1= '&&' ) | (enumLiteral_2= '||' ) )
            {
            // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:816:1: ( (enumLiteral_0= '!' ) | (enumLiteral_1= '&&' ) | (enumLiteral_2= '||' ) )
            int alt14=3;
            switch ( input.LA(1) ) {
            case 22:
                {
                alt14=1;
                }
                break;
            case 23:
                {
                alt14=2;
                }
                break;
            case 24:
                {
                alt14=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 14, 0, input);

                throw nvae;
            }

            switch (alt14) {
                case 1 :
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:816:2: (enumLiteral_0= '!' )
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:816:2: (enumLiteral_0= '!' )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:816:4: enumLiteral_0= '!'
                    {
                    enumLiteral_0=(Token)match(input,22,FollowSets000.FOLLOW_22_in_ruleOperatorsEnum1689); 

                            current = grammarAccess.getOperatorsEnumAccess().getNOTEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_0, grammarAccess.getOperatorsEnumAccess().getNOTEnumLiteralDeclaration_0()); 
                        

                    }


                    }
                    break;
                case 2 :
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:822:6: (enumLiteral_1= '&&' )
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:822:6: (enumLiteral_1= '&&' )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:822:8: enumLiteral_1= '&&'
                    {
                    enumLiteral_1=(Token)match(input,23,FollowSets000.FOLLOW_23_in_ruleOperatorsEnum1706); 

                            current = grammarAccess.getOperatorsEnumAccess().getANDEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_1, grammarAccess.getOperatorsEnumAccess().getANDEnumLiteralDeclaration_1()); 
                        

                    }


                    }
                    break;
                case 3 :
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:828:6: (enumLiteral_2= '||' )
                    {
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:828:6: (enumLiteral_2= '||' )
                    // ../dk.itu.smdp.ftc/src-gen/dk/itu/smdp/ftc/parser/antlr/internal/InternalFTC.g:828:8: enumLiteral_2= '||'
                    {
                    enumLiteral_2=(Token)match(input,24,FollowSets000.FOLLOW_24_in_ruleOperatorsEnum1723); 

                            current = grammarAccess.getOperatorsEnumAccess().getOREnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_2, grammarAccess.getOperatorsEnumAccess().getOREnumLiteralDeclaration_2()); 
                        

                    }


                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOperatorsEnum"

    // Delegated rules


 

    
    private static class FollowSets000 {
        public static final BitSet FOLLOW_ruleModelRoot_in_entryRuleModelRoot75 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleModelRoot85 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_11_in_ruleModelRoot122 = new BitSet(new long[]{0x0000000000000010L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleModelRoot139 = new BitSet(new long[]{0x0000000001C01010L});
        public static final BitSet FOLLOW_12_in_ruleModelRoot157 = new BitSet(new long[]{0x0000000000000010L});
        public static final BitSet FOLLOW_ruleModule_in_ruleModelRoot178 = new BitSet(new long[]{0x0000000000002010L});
        public static final BitSet FOLLOW_ruleModule_in_ruleModelRoot199 = new BitSet(new long[]{0x0000000000002010L});
        public static final BitSet FOLLOW_13_in_ruleModelRoot212 = new BitSet(new long[]{0x0000000001C01010L});
        public static final BitSet FOLLOW_ruleMapping_in_ruleModelRoot235 = new BitSet(new long[]{0x0000000001C01012L});
        public static final BitSet FOLLOW_ruleMapping_in_ruleModelRoot256 = new BitSet(new long[]{0x0000000001C01012L});
        public static final BitSet FOLLOW_ruleFeatureExpression_in_entryRuleFeatureExpression293 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleFeatureExpression303 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleBinaryFeatureExpression_in_ruleFeatureExpression349 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleBinaryFeatureExpression_in_entryRuleBinaryFeatureExpression383 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleBinaryFeatureExpression393 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleUnaryFeatureExpression_in_ruleBinaryFeatureExpression441 = new BitSet(new long[]{0x0000000001C00002L});
        public static final BitSet FOLLOW_ruleFeature_in_ruleBinaryFeatureExpression468 = new BitSet(new long[]{0x0000000001C00002L});
        public static final BitSet FOLLOW_ruleOperatorsEnum_in_ruleBinaryFeatureExpression499 = new BitSet(new long[]{0x0000000001C01010L});
        public static final BitSet FOLLOW_ruleBinaryFeatureExpression_in_ruleBinaryFeatureExpression520 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleUnaryFeatureExpression_in_entryRuleUnaryFeatureExpression558 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleUnaryFeatureExpression568 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleOperatorsEnum_in_ruleUnaryFeatureExpression614 = new BitSet(new long[]{0x0000000001C01010L});
        public static final BitSet FOLLOW_ruleFeature_in_ruleUnaryFeatureExpression635 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleMapping_in_entryRuleMapping671 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleMapping681 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleFeatureExpression_in_ruleMapping727 = new BitSet(new long[]{0x0000000000004000L});
        public static final BitSet FOLLOW_14_in_ruleMapping739 = new BitSet(new long[]{0x0000000000008030L});
        public static final BitSet FOLLOW_ruleFileMapping_in_ruleMapping761 = new BitSet(new long[]{0x0000000000008030L});
        public static final BitSet FOLLOW_ruleFileMapping_in_ruleMapping782 = new BitSet(new long[]{0x0000000000008030L});
        public static final BitSet FOLLOW_15_in_ruleMapping797 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleFileMapping_in_entryRuleFileMapping833 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleFileMapping843 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_ruleFileMapping891 = new BitSet(new long[]{0x0000000000010000L});
        public static final BitSet FOLLOW_16_in_ruleFileMapping903 = new BitSet(new long[]{0x0000000000000010L});
        public static final BitSet FOLLOW_rulePathExpression_in_ruleFileMapping924 = new BitSet(new long[]{0x0000000000000012L});
        public static final BitSet FOLLOW_rulePathExpression_in_ruleFileMapping945 = new BitSet(new long[]{0x0000000000000012L});
        public static final BitSet FOLLOW_rulePathExpression_in_entryRulePathExpression982 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRulePathExpression992 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_rulePath_in_rulePathExpression1039 = new BitSet(new long[]{0x0000000000380002L});
        public static final BitSet FOLLOW_rulePathEnum_in_rulePathExpression1069 = new BitSet(new long[]{0x0000000000000010L});
        public static final BitSet FOLLOW_rulePathExpression_in_rulePathExpression1090 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_rulePath_in_entryRulePath1128 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRulePath1138 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_ID_in_rulePath1179 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleModule_in_entryRuleModule1219 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleModule1229 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleModule1271 = new BitSet(new long[]{0x0000000000020002L});
        public static final BitSet FOLLOW_17_in_ruleModule1289 = new BitSet(new long[]{0x0000000000000010L});
        public static final BitSet FOLLOW_rulePathExpression_in_ruleModule1310 = new BitSet(new long[]{0x0000000000040010L});
        public static final BitSet FOLLOW_rulePathExpression_in_ruleModule1331 = new BitSet(new long[]{0x0000000000040010L});
        public static final BitSet FOLLOW_18_in_ruleModule1344 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleFeature_in_entryRuleFeature1382 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleFeature1392 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleFeature1433 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_entryRuleEString1474 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleEString1485 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_STRING_in_ruleEString1525 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleEString1551 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_19_in_rulePathEnum1610 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_20_in_rulePathEnum1627 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_21_in_rulePathEnum1644 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_22_in_ruleOperatorsEnum1689 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_23_in_ruleOperatorsEnum1706 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_24_in_ruleOperatorsEnum1723 = new BitSet(new long[]{0x0000000000000002L});
    }


}